home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / namei.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  86 lines

  1. #ifndef _LINUX_NAMEI_H
  2. #define _LINUX_NAMEI_H
  3.  
  4. #include <linux/linkage.h>
  5.  
  6. struct vfsmount;
  7.  
  8. struct open_intent {
  9.     int    flags;
  10.     int    create_mode;
  11. };
  12.  
  13. enum { MAX_NESTED_LINKS = 5 };
  14.  
  15. struct nameidata {
  16.     struct dentry    *dentry;
  17.     struct vfsmount *mnt;
  18.     struct qstr    last;
  19.     unsigned int    flags;
  20.     int        last_type;
  21.     unsigned    depth;
  22.     char *saved_names[MAX_NESTED_LINKS + 1];
  23.  
  24.     /* Intent data */
  25.     union {
  26.         struct open_intent open;
  27.     } intent;
  28. };
  29.  
  30. /*
  31.  * Type of the last component on LOOKUP_PARENT
  32.  */
  33. enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND};
  34.  
  35. /*
  36.  * The bitmask for a lookup event:
  37.  *  - follow links at the end
  38.  *  - require a directory
  39.  *  - ending slashes ok even for nonexistent files
  40.  *  - internal "there are more path compnents" flag
  41.  *  - locked when lookup done with dcache_lock held
  42.  */
  43. #define LOOKUP_FOLLOW         1
  44. #define LOOKUP_DIRECTORY     2
  45. #define LOOKUP_CONTINUE         4
  46. #define LOOKUP_PARENT        16
  47. #define LOOKUP_NOALT        32
  48. /*
  49.  * Intent data
  50.  */
  51. #define LOOKUP_OPEN        (0x0100)
  52. #define LOOKUP_CREATE        (0x0200)
  53. #define LOOKUP_ACCESS        (0x0400)
  54.  
  55. extern int FASTCALL(__user_walk(const char __user *, unsigned, struct nameidata *));
  56. #define user_path_walk(name,nd) \
  57.     __user_walk(name, LOOKUP_FOLLOW, nd)
  58. #define user_path_walk_link(name,nd) \
  59.     __user_walk(name, 0, nd)
  60. extern int FASTCALL(path_lookup(const char *, unsigned, struct nameidata *));
  61. extern int FASTCALL(path_walk(const char *, struct nameidata *));
  62. extern int FASTCALL(link_path_walk(const char *, struct nameidata *));
  63. extern void path_release(struct nameidata *);
  64. extern void path_release_on_umount(struct nameidata *);
  65.  
  66. extern struct dentry * lookup_one_len(const char *, struct dentry *, int);
  67. extern struct dentry * lookup_hash(struct qstr *, struct dentry *);
  68.  
  69. extern int follow_down(struct vfsmount **, struct dentry **);
  70. extern int follow_up(struct vfsmount **, struct dentry **);
  71.  
  72. extern struct dentry *lock_rename(struct dentry *, struct dentry *);
  73. extern void unlock_rename(struct dentry *, struct dentry *);
  74.  
  75. static inline void nd_set_link(struct nameidata *nd, char *path)
  76. {
  77.     nd->saved_names[nd->depth] = path;
  78. }
  79.  
  80. static inline char *nd_get_link(struct nameidata *nd)
  81. {
  82.     return nd->saved_names[nd->depth];
  83. }
  84.  
  85. #endif /* _LINUX_NAMEI_H */
  86.